perm filename FINC.FAI[T,LCS] blob sn#015756 filedate 1972-12-04 generic text, type T, neo UTF8
ENTRY FINC

TITLE FINC - Increment file name

RET←1		;WHERE TO RETURN RESULT
PNTR←2		;POINTER TO WORD
CHAR←3		;A SIXBIT CHARACTER
P←17		;A PDL

;CALLING SEQUENCE
;	PUSH P,SIXBIT_FILE_NAME
;	PUSHJ P,FINC
;
;SETS .SKIP. TO -1 IF INCREMENT OVERFLOWS
; CLOBBERS 2-3
;
;FOR SAIL:
;EXTERNAL INTEGER PROCEDURE FINC(INTEGER SIXBIT_FILE_NAME)
EXTERNAL .SKIP.

FINC:	MOVE RET,-1(P)
	MOVE PNTR,[POINT 6,1,35];SET UP TO LOOK AT LOWEST CHARACTER
	SETZM .SKIP.
FINC1:	LDB CHAR,PNTR
	JUMPE CHAR,FINC3	;IF ZERO, TRY NEXT
	CAIN CHAR,'9'		;IS IT A '9'
	JRST [	MOVEI CHAR,'0'	;SET IT TO '0' AND TRY NEXT CHARACTER
		JRST FINC3]
	CAIN CHAR,'Z'		;IS IT A 'Z'
	JRST [	MOVEI CHAR,'A'	;SET IT TO 'A' AND TRY NEXT CHARACTER
		JRST FINC3]
FINC2:	ADDI CHAR,1
	DPB CHAR,PNTR
FINCRT:	SUB P,[2,2]		;FLUSH RET PARAMETER
	JRST @2(P)		;AND RETURN
FINC3:	DPB CHAR,PNTR		;PUT NEW CHARACTER IN
	CAME PNTR,[POINT 6,1,5]	;ARE WE GOING TO RUN OFF THE END
	JRST [	ADD PNTR,[XWD 60000,0]	;NO, DECREMENT BYTE POINT TO
		JRST FINC1]		;LOOK AT CHARACTER TO THE RIGHT
					;AND TRY AGAIN
	TRNE RET,77		;IS THERE ROOM TO SHIFT RIGHT?
	JRST [	SETOM .SKIP.	;NO! RETURN WITH ERROR SET
		JRST FINCRT]
	LSH RET,-6
	JRST FINC2
	END